<?php
namespace app\erp_meixingtiyu\controller;

use app\erp_meixingtiyu\model\ArenaPart as ArenaPartModel;
use app\erp_meixingtiyu\model\ArenaPartTimeFragment as ArenaPartTimeFragmentModel;
use app\store\controller\Controller as StoreController;
use think\facade\Request;
use app\erp_meixingtiyu\logic\ArenaPart as ArenaPartLogic;

class ArenaPart extends StoreController
{
    /**
     * 获取指定场地id下的所有半场分页列表
     * @param int $arenaId
     */
    public function list($arenaId)
    {
        $parts = ArenaPartModel::getPaginatePartsByArenaId($arenaId);
        return $this->renderSuccess($parts->toArray());
    }

    /**
     * 添加半场，关联对应的时间段
     */
    public function add()
    {
        $params = Request::only([
            'arena_id',
            'continuity',
            'name',
            'status',
            'sort',
        ]);
        (new ArenaPartModel())->createPartWithTimeFragments($params);
        return $this->renderSuccess();
    }

    /**
     * 修改半场
     * TODO: 修改半场的状态会关闭所有的时段，可能会与未来有已预订的时段冲突，所以需要添加一个判断，如果未来的时段里有用户预订了该半场的场次，则不允许修改半场状态，可通过管理员后台操作场次预订来关闭未来一段时间的状态，待无顾客预订时再关闭整个半场
     */
    public function edit()
    {
        $params = Request::only([
            'arena_part_id',
            'arena_id',
            'continuity',
            'status',
            'name',
            'sort',
        ]);
        $part = ArenaPartModel::update($params);
        return $this->renderSuccess($part->toArray());
    }

    /**
     * 删除半场
     * TODO: 未来的时间有预约的情况，不允许删除
     */
    public function del($arenaPartId)
    {
        (new ArenaPartModel())->deletePartWithFragmentsById($arenaPartId);
        return $this->renderSuccess([], '删除半场成功');
    }

    /**
     * 获取指定半场下的所有时段信息
     */
    public function partFragments($arenaPartId)
    {
        $part = ArenaPartLogic::getFragments($arenaPartId);
        return $this->renderSuccess($part);
    }

    /**
     * 修改指定半场下指定时段的价格
     * @param int $id ArenaPartTimeFragmentModel模型的 id
     */
    public function editPrice($id, $price)
    {
        $result = ArenaPartTimeFragmentModel::update(compact('id', 'price'));
        return $this->renderSuccess($result->toArray(), '修改成功');
    }

    /**
     * 修改指定半场下指定时段的状态
     * @param int $id ArenaPartTimeFragmentModel模型的 id
     */
    public function editStatus($id, $status)
    {
        $result = ArenaPartTimeFragmentModel::update(compact('id', 'status'));
        return $this->renderSuccess($result->toArray(), '修改成功');
    }
}
